package ao.com.bna.controle;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;

import ao.com.bna.beans.BoleanDesconto;
import ao.com.bna.beans.ExtensaoProcesso;
import ao.com.bna.beans.Transgressor;
import ao.com.bna.dao.BoleanDescontoDao;
import ao.com.bna.dao.ExtensaoProcessoDao;
import ao.com.bna.dao.TransgressorDao;
import ao.com.bna.util.BeanFactory;

/**
 * @see ManagedBean para manipular dados da pagina xhtml
 */
@ManagedBean(name="extensaoProcesso")
@SessionScoped
public class ExtensaoProcessoControle {

	private ExtensaoProcesso extensaoProcessoEntity = new ExtensaoProcesso();
	private ExtensaoProcessoDao extensaoProcessoDao = (ExtensaoProcessoDao) BeanFactory.getBean("extensaoProcessoDao", ExtensaoProcessoDao.class);
	
	//***** Transgressor
	private Transgressor transgressorEntity = new Transgressor();
	private TransgressorDao transgressorDao = (TransgressorDao) BeanFactory.getBean("transgressorDao", TransgressorDao.class);
	
	//***** BoleanDesconto
	private BoleanDesconto boleanDescontoEntity = new BoleanDesconto();
	private BoleanDescontoDao boleanDescontoDao = (BoleanDescontoDao) BeanFactory.getBean("boleanDescontoDao", BoleanDescontoDao.class);
	
	private Long boleanDescontoId;
	private Long transgressorId;
	
	private DataModel model;

	
	/**
	 * @see Metodo ListaExtensaoProcessos retorna todos os Estado Processo.
	 */
	public DataModel getListaExtensaoProcessos() {
        model = new ListDataModel(extensaoProcessoDao.listar());
        return model;

    }

	
	/**
	 * @see Metodo salvarExtensaoProcesso
	 */
	 public String salvarExtensaoProcesso() {
	        String s = "listaExtensaoProcesso";
	        try {
	        	
	        	transgressorEntity = transgressorDao.obterPorID(transgressorId);
	        	extensaoProcessoEntity.setTransgressor(transgressorEntity);
	        	
	        	boleanDescontoEntity = boleanDescontoDao.obterPorID(boleanDescontoId);
	        	extensaoProcessoEntity.setBoleanDesconto(boleanDescontoEntity);

	        	extensaoProcessoDao = (ExtensaoProcessoDao) BeanFactory.getBean("extensaoProcessoDao", ExtensaoProcessoDao.class);

	        	extensaoProcessoDao.gravar(extensaoProcessoEntity);
	        	extensaoProcessoEntity.setValorDevolucao(null);
	        	extensaoProcessoEntity.setValorMulta(null);
	        	transgressorId = (long) 0;
	        	boleanDescontoId = (long) 0;
	        	
	            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"SALVOU COM SUCESSO","Processo Estado"));

	        } catch (Exception e) {
	            e.printStackTrace();
	            s = "falhou";
	            // mostrar o erro no faces
	            String msg = e.getCause().toString();
	            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,msg,"Processo Estado"));

	        }
	        return s;
	    }

	
	     /**
		 * @see Metodo navegaCriarExtensaoProcesso vai para pagina criarExtensaoProcesso.xhtml
		 */
	 public String navegaCriarExtensaoProcesso() {
	        String t = "criaExtensaoProcesso";
	        
        	extensaoProcessoEntity = new ExtensaoProcesso();
        

	        // retorna o nome da pagina Criar Estado Processo
	        return t;

	    }

	 /**
      * @see Metodo editarExtensaoProcesso 
	 */
	 public String editarExtensaoProcesso() {
	        String r = "listaExtensaoProcesso";
	        try {
	        	
	        	transgressorEntity = transgressorDao.obterPorID(transgressorId);
	        	extensaoProcessoEntity.setTransgressor(transgressorEntity);
	        	
	        	boleanDescontoEntity = boleanDescontoDao.obterPorID(boleanDescontoId);
	        	extensaoProcessoEntity.setBoleanDesconto(boleanDescontoEntity);

	        	extensaoProcessoDao = (ExtensaoProcessoDao) BeanFactory.getBean("extensaoProcessoDao", ExtensaoProcessoDao.class);

	        	extensaoProcessoDao.actualiza(extensaoProcessoEntity);
	            

	           FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"EDITOU COM SUCESSO","Estado Processo"));

	        } catch (Exception e) {
	            e.printStackTrace();
	            r = "falhou";
	            // mostrar o erro no faces
	            String msg = e.getCause().toString();
	            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,msg,"Estado Processo"));

	        }
	        return r;
	    }


	 /**
      * @see Metodo navegaEditarExtensaoProcesso vai a pagina editarExtensaoProcesso.xhtml 
	 */
     public String navegaEditarExtensaoProcesso() {
    	 
    FacesContext context = FacesContext.getCurrentInstance();
    Map requestParameterMap = (Map) context.getExternalContext().getRequestParameterMap();
    // aqui tem que ser long porque o inteiro que ele recebe e do tipo long
    // o valor do get tem q ser igual ao valor d f:param na pagina listaExtensaoProcesso.xhtml
    Long idExtensaoProcesso = Long.parseLong(requestParameterMap.get("idExtensaoProcesso").toString());
//    this.user = userDao.getUser(userId);
    this.extensaoProcessoEntity= extensaoProcessoDao.obterPorID(idExtensaoProcesso);
    transgressorId = extensaoProcessoEntity.getTransgressor().getIdTransgressor();
    boleanDescontoId = extensaoProcessoEntity.getBoleanDesconto().getIdBoleanDesconto();

   
    return "editarExtensaoProcesso";
     }
     
     /**
      * @see Metodo apagarExtensaoProcesso 
	 */
     public String apagarExtensaoProcesso() {
	        String r = "listaExtensaoProcesso";
	        try {
	        	extensaoProcessoDao.remover(extensaoProcessoEntity);
	            
	           FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"APAGOU COM SUCESSO","Estado Processo"));

	        } catch (Exception e) {
	            e.printStackTrace();
	            r = "falhou";
	            // mostrar o erro no faces
	            String msg = e.getCause().toString();
	            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,msg,"Estado Processo"));

	        }
	        return r;
	    }
    
     
     /**
      * @see Metodo navegaApagarExtensaoProcesso 
	 */
    public String navegaApagarExtensaoProcesso() {
   	 
        FacesContext context = FacesContext.getCurrentInstance();
        Map requestParameterMap = (Map) context.getExternalContext().getRequestParameterMap();
        // aqui tem que ser long porque o inteiro que ele recebe e do tipo long
        // o valor do get tem q ser igual ao valor d f:param na pagina listaExtensaoProcesso.xhtml
        Long idExtensaoProcesso = Long.parseLong(requestParameterMap.get("idExtensaoProcesso").toString());
        // this.user = userDao.getUser(userId);
        this.extensaoProcessoEntity= extensaoProcessoDao.obterPorID(idExtensaoProcesso);
        transgressorId = extensaoProcessoEntity.getTransgressor().getIdTransgressor();
        boleanDescontoId = extensaoProcessoEntity.getBoleanDesconto().getIdBoleanDesconto();
        
        return "apagarExtensaoProcesso";
}
    
    public List<SelectItem> getItemsTransgressor(){
    	 List<SelectItem> lista = new ArrayList<SelectItem>();

         List<Transgressor> resultado = transgressorDao.listar();
         //for (type var : arr)
         for (Transgressor teste : resultado) {
             SelectItem item = new SelectItem(teste.getIdTransgressor(), teste.getNome());
 //
             lista.add(item);
         }
         return lista;

	}

    public List<SelectItem> getItemsBoleanDesconto(){
    	List<SelectItem> lista = new ArrayList<SelectItem>();

        List<BoleanDesconto> resultado = boleanDescontoDao.listar();
        //for (type var : arr)
        for (BoleanDesconto teste : resultado) {
            SelectItem item = new SelectItem(teste.getIdBoleanDesconto(), teste.getNome());
//
            lista.add(item);
        }
        return lista;

	}
	

	public ExtensaoProcesso getExtensaoProcessoEntity() {
		return extensaoProcessoEntity;
	}
	public void setExtensaoProcessoEntity(ExtensaoProcesso extensaoProcessoEntity) {
		this.extensaoProcessoEntity = extensaoProcessoEntity;
	}
	
	
	
	public ExtensaoProcessoDao getExtensaoProcessoDao() {
		return extensaoProcessoDao;
	}
	public void setExtensaoProcessoDao(ExtensaoProcessoDao extensaoProcessoDao) {
		this.extensaoProcessoDao = extensaoProcessoDao;
	}


	public Transgressor getTransgressorEntity() {
		return transgressorEntity;
	}


	public void setTransgressorEntity(Transgressor transgressorEntity) {
		this.transgressorEntity = transgressorEntity;
	}


	public TransgressorDao getTransgressorDao() {
		return transgressorDao;
	}


	public void setTransgressorDao(TransgressorDao transgressorDao) {
		this.transgressorDao = transgressorDao;
	}


	public BoleanDesconto getBoleanDescontoEntity() {
		return boleanDescontoEntity;
	}


	public void setBoleanDescontoEntity(BoleanDesconto boleanDescontoEntity) {
		this.boleanDescontoEntity = boleanDescontoEntity;
	}


	public BoleanDescontoDao getBoleanDescontoDao() {
		return boleanDescontoDao;
	}


	public void setBoleanDescontoDao(BoleanDescontoDao boleanDescontoDao) {
		this.boleanDescontoDao = boleanDescontoDao;
	}


	public Long getBoleanDescontoId() {
		return boleanDescontoId;
	}


	public void setBoleanDescontoId(Long boleanDescontoId) {
		this.boleanDescontoId = boleanDescontoId;
	}


	public Long getTransgressorId() {
		return transgressorId;
	}


	public void setTransgressorId(Long transgressorId) {
		this.transgressorId = transgressorId;
	}
	
	
	
	
	
	
}
